#ifndef FPLAYER_MESSAGE_H
#define FPLAYER_MESSAGE_H

#include "CommonDefine.h"

enum MsgID{
  MsgID_Init = 0x1001,
  MsgID_Release,
  MsgID_None
};


class Handler;

//结构体 消息对象
typedef struct ST_Message : public IBasic {
  int32_t what;
  int32_t arg1 = 0;
  int32_t arg2 = 0;
  void *pObj = nullptr;

  Handler *pHandler = nullptr;

  const char *getClassName() override {
    return "Message";
  }

  void toString() override {
    LOG_TEST("Message(what:%d,arg1:%d,arg2:%d,pObj:%p)", what, arg1, arg2, pObj)
  }

} Message;

//结构体 消息节点
typedef struct ST_MessageNode {
  //消息体
  Message *pMsg = nullptr;

  //下一个消息节点
  struct ST_MessageNode *pNext = nullptr;
} MessageNode;

/**
 * 创建消息体
 * @param what 消息ID
 * @param arg1 参数1
 * @param arg2 参数2
 * @param pObj 携带的指针数据
 * @return 消息体
 */
Message *Msg_Create(int32_t what, int32_t arg1, int32_t arg2, void *pObj);

/**
 * 创建消息体
 * @param what 消息ID
 * @param arg1 参数1
 * @return 消息体
 */
Message *Msg_Create(int32_t what, int32_t arg1);

/**
 * 创建消息体
 * @param what 消息ID
 * @param pObj 携带的指针数据
 * @return 消息体
 */
Message *Msg_Create(int32_t what, void *pObj);

/**
 * 创建消息体
 * @param what 消息ID
 * @return 消息体
 */
Message *Msg_Create(int32_t what);


#endif //FPLAYER_MESSAGE_H
